<?php

namespace app\index\controller;

use app\BaseController;
use app\common\model\PermissionsModel;
use app\common\model\UserAndRoleModel;
use think\facade\View;
use think\facade\Request;

/** 
 *  前端参数配置以及权限过滤
 * 
 * 时间：2020年3月28日16:23:16
 * 作者：夏立军
 *
 */
class IndexBase extends BaseController
{
    public function __construct()
    {
        // 验证是否可以通过该权限的验证 , 如果不成功则提示
        $validation_permissions_res = self::validation_permissions();
        if ($validation_permissions_res['code'] != 0) {
            if (request()->post()) {
                die('{"code":9999,"msg":"' . $validation_permissions_res['msg'] . '"}');
            } else {
                die(redirect_index($validation_permissions_res['msg'], url('Index/index'), false));
            }
        }
        // 加载配置数据
        self::index_config();
    }

    // 配置参数 初始化
    private function index_config()
    {
        //session 数据
        View::assign('user_info', session('index_login'));
        // 系统名称
        View::assign('system_name', config('ams_config.system_name'));
        // 前端注册功能
        View::assign('registered', config('ams_config.index_registered'));
    }

    // 前端所有权限验证
    public function validation_permissions()
    {
        // 模块名
        $model_name = app('http')->getName();
        // 控制器名称
        $controller_name = Request::controller();
        // 方法名称
        $action_name = Request::action();
        // 完整的权限名称
        $permissions_name = $model_name . '/' . $controller_name . '/' . $action_name;

        // 放行地址 所有用户都可以访问
        $filter_url = config('ams_config.filter_url');

        foreach ($filter_url as $row) {
            if ($permissions_name == $row) {
                return ['code' => 0, 'msg' => '放行地址'];
            }
        }

        // 确认已登录 
        if (!session('?index_login')) {
            return ['code' => 13, 'msg' => '【13】您当前未登录'];
        }

        // 已登录用户放行 放行的地址 index/User/index
        if('index/User/index' == $permissions_name){
            return ['code' => 0, 'msg' => '放行地址'];
        }

        // 用户ID
        $uid = session('index_login')->id;

        // 开始权限的验证
        // 用户肯定已经存在了，因为用的是登录后的权限

        // 查看该用户是否有权限
        $user_role = new UserAndRoleModel();
        $user_role_info = $user_role->get_user_role_info($uid);

        if (count($user_role_info) <= 0) {
            return ['code' => 1, 'msg' => '【1】当前用户无任何权限'];
        }

        // 1. 先验证 超级权限 角色 的状态是不是 9 
        foreach ($user_role_info as $row) {
            if (9 == $row['status']) {
                return ['code' => 0, 'msg' => '超级权限'];
            }
        }
        // 2. 不为 验证权限的状态
        foreach ($user_role_info as $row) {
            if (1 != $row['status']) {
                return ['code' => $row['status'], 'msg' => par_role_status($row['status'])];
            }
        }

        // 3. 可以进行权限验证的

        // 3.1 获取当前权限的ID
        $permissions = new PermissionsModel();
        $permissions_info = $permissions->get_permissions_info_by_url($permissions_name);
        if (is_null($permissions_info)) {
            return ['code' => 10, 'msg' => '【10】权限验证失败'];
        }

        // 3.2 查看权限是否可用
        if ($permissions_info['status'] != 1) {
            return ['code' => 11, 'msg' => '【11】权限已被禁用'];
        }

        // 4. 查看当前权限属于那些角色

        // 4.1 获取角色 ID
        $res = $permissions->validation_permissions_by_uid_and_pid($uid, $permissions_info['id']);
        if (!$res) {
            return ['code' => 12, 'msg' => '【12】您当前没有访问权限'];
        }

        return ['code' => 0, 'msg' => '验证通过'];
    }
}
